package com.controller.admin;

import com.entity.ErrorLog;
import com.entity.LoginHistory;
import com.entity.RegisterHistory;
import com.entity.VisitHistory;
import com.service.admin.AdminLogService;
import com.service.user.LogService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@CrossOrigin
@RestController
public class AdminLogController {
  @Autowired AdminLogService adminLogService;
  @Autowired LogService logService;

  /**
   * 获取第pageIndex页的网页浏览记录，页大小为pageIndex
   *
   * @param pageSize 页大小
   * @param pageIndex 页索引(从0开始)
   * @return 对应的网页浏览记录历史
   */
  @PostMapping("admin/getVisitHistory")
  public List<VisitHistory> getVisitHistory(
      @RequestParam("pageSize") int pageSize, @RequestParam("pageIndex") int pageIndex) {
    return adminLogService.getVisitHistory(pageSize, pageIndex);
  }

  /**
   * 获取某个月的每日访问量（返回)
   *
   * @param yearMonth 月份 格式为 2021-12
   * @return 长度为31的数组，表示对应月份每天的访问量
   */
  @PostMapping("admin/getPerDayVisit")
  public int[] getPerDayVisit(@RequestParam("yearMonth") String yearMonth) {
    return adminLogService.getPerDayVisit(yearMonth);
  }

  /**
   * 获取在给定时间段内每个小时的所有天的网页个数（)
   *
   * @param startDate 开始时间
   * @param endDate 结束时间
   * @return 返回长度为24的数组，表示对应日期内各小时内的访问量和
   */
  @PostMapping("admin/getPerHourVisit")
  public int[] getPerHourVisit(
      @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
    return adminLogService.getPerHourVisit(startDate, endDate);
  }

  /**
   * 获取某个月的每日登录量（返回)
   *
   * @param yearMonth 月份 格式为 2021-12
   * @return 长度为31的数组，表示对应月份每天的登录量
   */
  @PostMapping("admin/getPerDayLogin")
  public int[] getPerDayLogin(@RequestParam("yearMonth") String yearMonth) {
    return adminLogService.getPerDayLogin(yearMonth);
  }

  /**
   * 获取某个月的每日注册量（返回)
   *
   * @param yearMonth 月份 格式为 2021-12
   * @return 长度为31的数组，表示对应月份每天的注册量
   */
  @PostMapping("admin/getPerDayRegister")
  public int[] getPerDayRegister(@RequestParam("yearMonth") String yearMonth) {
    return adminLogService.getPerDayRegister(yearMonth);
  }

  /**
   * 获取注册记录
   *
   * @param pageSize 页大小
   * @param pageIndex 页索引
   * @return 对应页的注册记录
   */
  @PostMapping("admin/getRegisterHistory")
  public List<RegisterHistory> getRegisterHistory(
      @RequestParam("pageSize") int pageSize, @RequestParam("pageIndex") int pageIndex) {
    return adminLogService.getRegisterHistory(pageSize, pageIndex);
  }

  /**
   * 获取登录记录
   *
   * @param pageSize 页大小
   * @param pageIndex 页索引
   * @return 对应页的登录记录
   */
  @PostMapping("admin/getLoginHistory")
  public List<LoginHistory> getLoginHistory(
      @RequestParam("pageSize") int pageSize, @RequestParam("pageIndex") int pageIndex) {
    return adminLogService.getLoginHistory(pageSize, pageIndex);
  }

  /**
   * 获取错误日志
   *
   * @param pageSize 页大小
   * @param pageIndex 页索引
   * @return 对应页的错误日志记录
   */
  @PostMapping("admin/getErrorLog")
  public List<ErrorLog> getErrorLog(
      @RequestParam("pageSize") int pageSize, @RequestParam("pageIndex") int pageIndex) {
    return adminLogService.getErrorHistory(pageSize, pageIndex);
  }

  /** 将编号为errorId的错误日志设置为已查看 */
  @PostMapping("admin/setErrorVisited")
  public int setErrorVisited(@RequestParam("errorId") int errorId) {
    return adminLogService.setErrorVisited(errorId);
  }

  @GetMapping("insertError")
  public int insertError() {
    int x = 3 / 0;
    System.out.println("错误发生了，但我仍被执行了");
    return 1;
  }
}
